<?php
use frontend\modules\yii2\widgets\layouts\markdown\Markdown;

$this->title = '将日志发送到邮箱-EmailTarget-Log-Components组件';
$this->registerMetaTag([
    'name' => 'keywords',
    'content' => 'yii,yii2,框架,应用组件,Components,使用,教程,log,EmailTarget'
]);
$this->registerMetaTag([
    'name' => 'description',
    'content' => 'EmailTarget可以将日志以邮件的形式发出，这对于上报特别严重的系统异常非常有用，可以让系统运维人员在第一时间发现并修复异常。'
]);


$html = [
    "概述" => <<<HTML
# 将日志发送到邮箱
`yii\log\EmailTarget`可以将日志以邮件的形式发出，这对于上报特别严重的系统异常非常有用，可以让系统运维人员在第一时间发现并修复异常。

HTML,
    "前提" => <<<HTML
## 前提条件 id=prepare
要使用邮件日志功能，需要在配置文件中配置可以发送邮件的客户端，以QQ邮箱为例：
```php
'components' => [
    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.qq.com',
            'username' => 'log@qq.com',
            'password' => 'xxxxxxxxxxxxx',
            'port' => '465',
            'encryption' => 'ssl',
        ],
        'messageConfig' => [
            'charset' => 'UTF-8',
            // 这里的from必须要和上述username保持一致
            'from' => ['log@qq.com' => 'Yii'],
        ],
    ],
],
```
要启用QQ邮箱的客户端发送邮件功能，需要注意两点：
- 开启smtp服务：
![开启QQ的smtp服务](/images/20211230222602.png "开启QQ的smtp服务")

- 申请授权码：  
这个授权码需要当做密码使用，你不能将邮箱的登录密码当做客户端的邮件发送密码，而是要申请授权码。
HTML,


    "CONFIG" => <<<HTML
## 配置举例 id=config
常见的配置如下：
```php
[
    'components' => [
        'log' => [
            'flushInterval' => 1,
            'traceLevel' => 0,
            'targets' => [
                [
                    'logVars' => [],
                    'class' => 'yii\log\EmailTarget',
                    'mailer' => 'mailer', // 邮箱组件的components id
                    'categories' => ['email'],
                    'message' => [
                        // 这里的from必须要和邮箱组件的username保持一致
                        'from' => ['log@qq.com'],
                        'to' => ['developer1@example.com', 'developer2@example.com'],
                        'subject' => 'Log message',
                    ],
                ],
            ],
        ],
    ],
]
```
> 在配置邮箱和`EmailTarget`的时候，值得注意的是`from`属性需要和邮箱组件中的`username`属性保持一致，否则无法发送邮件。

HTML,
    "example" => <<<HTML
## 发送举例 id=example
邮件日志的使用方式和`FileTarget`是一样的，举例如下：
```php
Yii::info("log email message", "email");
```
此时，您在`EmailTarget`中配置的收件人会收到类似下面的邮件：
![收到的邮件](/images/20211230223643.png "收到的邮件")
HTML,
    "" => <<<HTML

HTML,
];

 //Yii::info("log email message", "email");die;
// var_dump(Yii::$app->log->targets["login"]->messages = ["test", "info", "login"]);die;
// die;

echo Markdown::widget(["content" => implode("\n", $html)]);

